package com.ruoyi.art.service.impl;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.art.mapper.ArtGoodMapper;
import com.ruoyi.art.domain.ArtGood;
import com.ruoyi.art.service.IArtGoodService;

/**
 * 商品表Service业务层处理
 * 
 * @author hxm
 * @date 2025-06-09
 */
@Service
public class ArtGoodServiceImpl implements IArtGoodService 
{
    @Autowired
    private ArtGoodMapper artGoodMapper;

    /**
     * 查询商品表
     * 
     * @param goodId 商品表主键
     * @return 商品表
     */
    @Override
    public ArtGood selectArtGoodByGoodId(Long goodId)
    {
        return artGoodMapper.selectArtGoodByGoodId(goodId);
    }

    /**
     * 查询商品表列表
     * 
     * @param artGood 商品表
     * @return 商品表
     */
    @Override
    public List<ArtGood> selectArtGoodList(ArtGood artGood)
    {
        return artGoodMapper.selectArtGoodList(artGood);
    }

    /**
     * 新增商品表
     * 
     * @param artGood 商品表
     * @return 结果
     */
    @Override
    public int insertArtGood(ArtGood artGood)
    {
        // 设置创建时间为当前时间
        artGood.setGoodCreateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date()));
        // 设置更新时间为当前时间（新增时更新时间与创建时间相同）
        artGood.setGoodUpdateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date()));

        // 获取当前最大排序号
        Long maxSort = artGoodMapper.selectMaxGoodSort();
        // 新数据排序号为最大排序号 + 1（若为首次插入，默认 1）
        artGood.setGoodOrder(maxSort != null ? maxSort + 1 : 1);
        return artGoodMapper.insertArtGood(artGood);
    }


    /**
     * 修改商品表
     * 
     * @param artGood 商品表
     * @return 结果
     */
    @Override
    public int updateArtGood(ArtGood artGood)
    {
        // 设置更新时间为当前时间
        artGood.setGoodUpdateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date()));
        return artGoodMapper.updateArtGood(artGood);
    }

    /**
     * 批量删除商品表
     * 
     * @param goodIds 需要删除的商品表主键
     * @return 结果
     */
    @Override
    public int deleteArtGoodByGoodIds(Long[] goodIds)
    {
        return artGoodMapper.deleteArtGoodByGoodIds(goodIds);
    }

    /**
     * 删除商品表信息
     * 
     * @param goodId 商品表主键
     * @return 结果
     */
    @Override
    public int deleteArtGoodByGoodId(Long goodId)
    {
        return artGoodMapper.deleteArtGoodByGoodId(goodId);
    }

//    @Override
//    public int moveUp(Long goodId) {
//        // 获取当前商品
//        ArtGood current = artGoodMapper.selectArtGoodByGoodId(goodId);
//        if (current == null) return 0;
//
//        // 查询上一条记录（排序号比当前小且最大的记录）
//        ArtGood prev = artGoodMapper.selectPrevArtGood(current.getGoodOrder());
//        if (prev == null) return 0; // 已是第一条，无法上移
//
//        // 交换排序号
//        Long tempSort = current.getGoodOrder();
//        current.setGoodOrder(prev.getGoodOrder());
//        prev.setGoodOrder(tempSort);
//
//        // 更新数据库
//        artGoodMapper.updateArtGood(current);
//        return artGoodMapper.updateArtGood(prev);
//    }
//
//    @Override
//    public int moveDown(Long goodId) {
//        // 获取当前商品
//        ArtGood current = artGoodMapper.selectArtGoodByGoodId(goodId);
//        if (current == null) return 0;
//
//        // 查询下一条记录（排序号比当前大且最小的记录）
//        ArtGood next = artGoodMapper.selectNextArtGood(current.getGoodOrder());
//        if (next == null) return 0; // 已是最后一条，无法下移
//
//        // 交换排序号
//        Long tempSort = current.getGoodOrder();
//        current.setGoodOrder(next.getGoodOrder());
//        next.setGoodOrder(tempSort);
//
//        // 更新数据库
//        artGoodMapper.updateArtGood(current);
//        return artGoodMapper.updateArtGood(next);
//    }

    /**
     * 上移方法
     * @param goodId 商品ID
     * @return 操作结果
     */
    @Override
    public boolean moveUp(Long goodId) {
        ArtGood currentGood = artGoodMapper.selectArtGoodByGoodId(goodId);
        if (currentGood == null) {
            return false;
        }

        ArtGood prevGood = artGoodMapper.selectPrevArtGood(currentGood.getGoodOrder());
        if (prevGood == null) {
            return false;
        }

        // 交换排序值
        Long tempSort = currentGood.getGoodOrder();
        currentGood.setGoodOrder(prevGood.getGoodOrder());
        prevGood.setGoodOrder(tempSort);

        // 批量更新
        return artGoodMapper.batchUpdateSort(Arrays.asList(currentGood, prevGood)) > 0;
    }

    /**
     * 下移方法
     * @param goodId 商品ID
     * @return 操作结果
     */
    @Override
    public boolean moveDown(Long goodId) {
        ArtGood currentGood = artGoodMapper.selectArtGoodByGoodId(goodId);
        if (currentGood == null) {
            return false;
        }

        ArtGood nextGood = artGoodMapper.selectNextArtGood(currentGood.getGoodOrder());
        if (nextGood == null) {
            return false;
        }

        // 交换排序值
        Long tempSort = currentGood.getGoodOrder();
        currentGood.setGoodOrder(nextGood.getGoodOrder());
        nextGood.setGoodOrder(tempSort);

        // 批量更新
        return artGoodMapper.batchUpdateSort(Arrays.asList(currentGood, nextGood)) > 0;
    }

    /**
     * 批量更新排序
     * @param list 商品列表
     * @return 更新数量
     */
    @Override
    public int batchUpdateSort(List<ArtGood> list) {
        return artGoodMapper.batchUpdateSort(list);
    }


}
